package com.tencent.api.druid;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.alibaba.druid.pool.DruidPooledConnection;
import org.junit.Test;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

/**
 * Druid连接池使用类
 */
public class DruidUsedPart {

    /**
     * 直接使用代码设置连接池连接参数方式
     *  1.创建一个Druid连接池对象
     *  2.设置连接池参数 【必须 | 非必须】
     *  3.获取连接  【通用方法，所有连接池都一样】
     *  4.回收连接  【通用方法，所有连接池都一样】
     */
    public void testHard() throws SQLException {

        //连接池对象
        DruidDataSource dataSource = new DruidDataSource();

        //设置参数
        //必须 连接数据库驱动类的全限定符   [注册驱动] 和url和user和password
        //帮我们完成驱动注册和连接
        dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/atguigu");
        dataSource.setUsername("root");
        dataSource.setPassword("1234");
        dataSource.setDriverClassName("com.mysql.cj.jdbc.driver");
        //非必须 初始化连接数量 最大的连接数量。。。
        dataSource.setInitialSize(5);//初始化连接数量
        dataSource.setMaxActive(10);//最大的连接数量

        //获取连接
//        DruidPooledConnection connection = dataSource.getConnection();
        Connection connection = dataSource.getConnection();//用父接口类接收即可

        //数据库CURD

        //回收链接
        connection.close();//连接池提供的连接，close，就是回收连接
    }

    /**
     * 通过读取外部配置文件的方法，实例化druid连接池对象
     */
    @Test
    public void testSoft() throws Exception {

        //1.读取外部配置文件 properties
        Properties properties = new Properties();
        //src下的文件，可以使用类加载器提供的方法
        InputStream ips = DruidUsedPart.class.getClassLoader().getResourceAsStream("druid.properties");
        properties.load(ips);

        //2.使用连接池的工具类的工程模式，创建连接池
        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);

        Connection connection = dataSource.getConnection();

        //数据库的CURD

        connection.close();
    }
}
